package me.zhengjie.server;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import me.zhengjie.dao.FreezeDao;
import me.zhengjie.dao.MaterialDao;
import me.zhengjie.dao.WareNestDao;
import me.zhengjie.dao.dto.FreezeTaskRecordQueryCriteria;
import me.zhengjie.dao.dto.WareNestQueryCriteria;
import me.zhengjie.utils.PageResult;
import me.zhengjie.vo.freeze.FreezeVo;
import me.zhengjie.vo.Result;
import me.zhengjie.vo.merge.AgainBindVo;

import java.util.List;
import java.util.Map;

public interface FreezeService extends IService<FreezeDao> {


    FreezeDao findDataByCode(String containerCode);

    /**
     * 查询冻结列表 - 第四步
     * @param freezeDao 请求参数
     */
    List<FreezeDao> findDataList(FreezeDao freezeDao);

    void updateDataByCode(FreezeDao freeDao);

    void deleteByContainerCode(String containerCode);

    /**
     * 查询冻结列表 - 第一步
     *
     * @param criteria
     * @return
     */
    PageResult<WareNestDao> findWareMaterial(WareNestQueryCriteria criteria);

    /**
     * 查询冻结任务列表
     *
     * @param criteria 请求参数
     * @return
     */
    PageResult<FreezeDao> findFreezeTaskList(FreezeTaskRecordQueryCriteria criteria);


    /**
     * 选择冻结物料 - 第二步
     *
     * @param freezeVo /**
     * @return
     */
    Result<?> freeze(FreezeVo freezeVo);

    /**
     * 开始任务 - 第三步
     *
     * @param taskId 任务id
     */
    Result<?> startTaskFindFreezeOutBound(String taskId);

    /**
     * 定时任务 - 出库
     */
    void scheduledTasksOutBound();

    /**
     * 扫描冻结载具编码获取冻结物料信息
     * @param containerCode 请求参数
     * @return
     */
    Result<List<MaterialDao>> scanFreezeContainerCode(String containerCode);

    /**
     * 重新绑定
     *
     * @param againBindVo 请求参数
     * @return
     */
    Result<?> rebindItemBarCodeList(AgainBindVo againBindVo);

    /**
     * 获取待分拣的载具数量
     * @param taskId 请求参数
     * @return
     */
    Result<Map<String, Integer>> countFreezeContainerCode(String taskId);


    /**
     * 完成冻结
     * @param params 请求参数
     * @return
     */
    Result<?> completeFreeze(Map<String, Object> params);


    /**
     * 解冻
     *
     * @param freezeVo 请求参数
     * @return
     */
    Result<?> unFreeze(FreezeVo freezeVo);





    /**
     * 查询是否存在任务
     * @return
     */
    Result<?> findExistTask();
}
